package thread;

class Singleton2{
    /**
     * 单例模式-懒汉模式
     */
    //1、不是立即初始化实例。
    private static volatile Singleton2 instance = null;
    //volatile 防止下面第一个if失效。
    //2、构造方法初始化为private。
    private Singleton2(){}
    //3、提供一个方法来获取上述单例的实例。
    //只有当真正用到这个实例的时候，才会真正创建这个实例。
    public static Singleton2 getInstance(){
        //1、如果这个条件成立，说明当前的单列未初始化过的，存在线程安全风险，需要加锁~
        if(instance == null){
            synchronized (Singleton2.class){
                if(instance == null){
                    instance = new Singleton2();
                }
            }
        }
        return instance;
    }
}

public class demo20 {
    public static void main(String[] args) {
        Singleton2 instance = Singleton2.getInstance();
    }
}
